package com.xyz.study.design_mode.f_prototype;

import com.xyz.study.design_mode.f_prototype.mode.Manager;
import com.xyz.study.design_mode.f_prototype.mode.Product;
import com.xyz.study.design_mode.f_prototype.mode.ProductBox;
import com.xyz.study.design_mode.f_prototype.mode.ProductUnderLine;

/**
 * 生成实例：其二 ---- Prototype 原型模式
 * 场景：由于各种原因不能根据类名生成实例或根据类名生成实例消耗更多资源的情况
 * 1、对象的种类太多，无法整合到一个类中，如果分别作为一个类会产生很多类文件
 * 2、无法根据类名创建对象，根据类名创建对象流程太过复杂
 * 3、想要解耦生成实例的框架与具体的对象类时
 * @author XYZ
 * @version 1.0.0
 * @since 2020/6/22
 */
public class PrototypeMain {
    public static void main(String[] args) {
        Manager manager = new Manager();
        manager.register("box", new ProductBox());
        manager.register("underLine", new ProductUnderLine());

        Product box = manager.getClone("box");
        box.use();
        Product underLine = manager.getClone("underLine");
        underLine.use();
    }
}
